

package vinterprojekt.controller;

import vinterprojekt.entity.*;

/** BookController bruges fra gui-klasserne via Facade klassen. Klassen er ansvarlig for, via DBController-klassen,
 * al manipulering af bog-databasen.
 *
 * @author stevie & Jonathan
 */

public class BookController
{
    private DBController dbc;
    
    public BookController() 
    {
        dbc = DBController.getInstance();
    }

    /**
     *
     * @return en ikke-persistent instans af Book
     */
    public Book bookNewInstance(String title, String yearOfPublication, String edition, String publisher, String ISBN, String ISBNSuffix, String remark, String author, boolean avail)
    {
        return new Book(title, yearOfPublication, edition, publisher, ISBN, ISBNSuffix, remark, author, avail);
    }

    /**
     *
     * @param b instans af Book der skal persisteres
     * @return true hvis det lykkedes at gemme Book-instansen, false hvis Books isbn-attribut allerede findes i databasen
     */
    public boolean bookSave(Book b)
    {
        try
        {
            dbc.bookSaveNew(b);
            return true;
        }

        catch (Exception e)
        {
            return false; // isbn findes allerede i databasen
        }
        
    }

    /**
     *
     * @param title
     * @param author
     * @return Et array bestående af Books der svarer til søge-parametrene. Ved tom søgning er retur-arrayets længde 0
     */
    public Book[] bookSearch(String title, String author)
    {
        Book[] books;
        books = dbc.bookSearch(author, title);
        return books;
    }

    /**
     *
     * @param isbn
     * @return En Book-instans svarende til isbn-parameteren, eller null.
     */
    public Book bookSearchIsbn(String isbn)
    {
        Book b;
        b = dbc.bookSearchIsbn(isbn);
        return b;  
    }

    /**
     *
     * @return Array bestående af Book instanser svarende til samtlige bøger i databasen 
     */
    public Book[] BookGetAll()
    {
        return dbc.bookGetAll();
    }

    /**
     *
     * @return Det samlede antal bøger gemt i databasen
     */
    public int bookGetTotalCount()
    {
        return dbc.bookGetTotalCount();
    }

    /**
     * Opdaterer databasen ud fra parameter books isbn-attribut.
     *
     * @param book
     * @param title
     * @param edition
     * @param authorName
     * @param publisherName
     * @param yearOfPublication
     * @return En opdateret Book instans
     */
    public Book bookUpdate(Book book, String title, String edition, String authorName, String publisherName, String yearOfPublication)
    {
        Book b;
        b = dbc.bookUpdate(book, title, edition, authorName, publisherName, yearOfPublication);
        return b;
    }

    /**
     * Sletter book permenent fra databasen
     * @param book
     */
    public void bookDelete(Book book)
    {
        dbc.bookDelete(book);
    }

}
